#include <stdio.h>
#include "timer.h"
#include "uln2003.h"
#include "hx711.h"


/**< 当前定时器秒数*/
static uint32_t currentTick = 0U;

static void timer1_cbk(void);
static void timer2_cbk(void);
static void timer3_cbk(void);
static void timer4_cbk(void);

/**< 软件定时器数组*/
static TimerDef timer_base[] = {
  {0,TIMER1_SET,0,timer1_cbk},
  {0,TIMER2_SET,0,timer2_cbk},
  {0,TIMER3_SET,0,timer3_cbk},
  {0,TIMER4_SET,0,timer4_cbk}
};

/**< 软件定时器长度*/
#define TIMER_LEN (ARRY_LEN(timer_base))

/**
 * @brief 软件定时器初始化
 * @param  id               
 */
void timer_base_init(uint8_t id)
{
  timer_base[id].currentTick = HAL_Get_Tick();
  timer_base[id].timeOut = timer_base[id].currentTick + timer_base[id].targTick;
}

/**
 * @brief 软件定时器组初始化
 */
void timer_init(void)
{
  for (uint8_t i = 0; i < TIMER_LEN; i++)
  {
    timer_base_init(i);
  }
}

/**
 * @brief 软件定时器入口函数
 */
void timer_entry(void)
{
  currentTick =  HAL_Get_Tick();
  for (uint8_t i = 0; i < TIMER_LEN; i++)
  {
    if (currentTick >= timer_base[i].timeOut)
    {
      if (timer_base[i].cbk)
      {
        timer_base[i].cbk();
      }
      
      timer_base_init(i);
    }
    
  }
}

/**
 * @brief 1分钟定时器任务
 */
static void timer1_cbk(void)
{
  motor_entry();
}

/**
 * @brief 5分钟定时器任务
 */
static void timer2_cbk(void)
{
  motor_entry();
}

/**
 * @brief 60分钟定时器任务
 */
static void timer3_cbk(void)
{
  motor_entry();
}

/**
 * @brief 1秒钟定时器任务
 */
static void timer4_cbk(void)
{
		printf("weight:%dg\n",WeightReal());
}

/* EOF */
